package com.cysoft.third.echarts.component.visualMap.piecewise;

/**
 * @author 玖零
 * @version v0.0.1
 * @project cysoft-third-echarts
 * @package com.cysoft.third.echarts.component.visualMap.piecewise
 * @date 2025/3/13 01:02
 * @desc 分段型视觉映射组件配置，用于在 ECharts 中实现分段数据到视觉元素的映射。
 */
public class VisualMapPiecewise {

    /**
     * 组件类型，固定为分段型
     */
    private String type = "piecewise";
    /**
     * 组件 ID。默认不指定，指定则可用于在 option 或者 API 中引用组件。
     */
    private String id;
    /**
     * 对于连续型数据，自动平均切分成几段。默认为 5 段。
     * 连续数据的范围需要 max 和 min 来指定。
     * 如果设置了 pieces 或者 categories，则 splitNumber 无效。
     */
    private Integer splitNumber = 5;
    /**
     * 自定义『分段式视觉映射组件（visualMapPiecewise）』的每一段的范围，以及每一段的文字，以及每一段的特别的样式。
     */
    private List<Map<String, Object>> pieces;
    /**
     * 用于表示离散型数据（或可以称为类别型数据、枚举型数据）的全集。
     */
    private List<String> categories;
    /**
     * 指定 visualMapPiecewise 组件的最小值。
     * 在连续型数据自定义分段模式（即 pieces 被使用）或离散数据根据类别分段模式（即 categories 被使用）时，max 和 min 不需指定。
     * 在连续型数据平均分段模式（即 splitNumber 被使用时）需指定 min、max，如果不指定，则默认为 [0, 200]。
     */
    private Integer min;
    /**
     * 指定 visualMapPiecewise 组件的最大值。
     * 连续型数据自定义分段模式（即 pieces 被使用）或离散数据根据类别分段模式（即 categories 被使用），max 和 min 不需指定。
     * 连续型数据平均分段模式（即 splitNumber 被使用时）需指定 min、max，如果不指定，则默认为 [0, 200]。
     */
    private Integer max;
    /**
     * 当 type 为 piecewise 且使用 min/max/splitNumber 时，此参数有效。当值为 true 时，界面上会额外多出一个『< min』的选块。
     */
    private Boolean minOpen;
    /**
     * 当 type 为 piecewise 且使用 min/max/splitNumber 时，此参数有效。当值为 true 时，界面上会额外多出一个『> max』的选块。
     */
    private Boolean maxOpen;
    /**
     * 选择模式，可以是：'multiple'（多选）、'single'（单选）、true（单选，从 5.3.3 版本支持）、false（禁止选择，从 5.3.3 版本支持）。
     */
    private Object selectedMode = "multiple";
    /**
     * 是否反转。
     * 连续型数据平均分段模式，数据排布规则，同 visualMap-continuous.inverse。
     * 连续型数据自定义分段模式或离散数据根据类别分段模式，每个块的排布位置，取决于 pieces 或 categories 列表的定义顺序。
     */
    private Boolean inverse;
    /**
     * 数据展示的小数精度。
     * 连续型数据平均分段模式，精度根据数据自动适应。
     * 连续型数据自定义分段模式或离散数据根据类别分段模式，精度默认为 0（没有小数）。
     */
    private Integer precision;
    /**
     * 图形的宽度，即每个小块的宽度。
     */
    private Integer itemWidth = 20;
    /**
     * 图形的高度，即每个小块的高度。
     */
    private Integer itemHeight = 14;
    /**
     * 指定组件中图形（比如小方块）和文字的摆放关系，可选值为：'auto' 自动决定、'left' 图形在左文字在右、'right' 图形在右文字在左。
     */
    private String align = "auto";
    /**
     * 两端的文本，如 ['High', 'Low']。
     * text 中的顺序，其实试试就知道。若要看详细的规则，参见 visualMap.inverse。
     * 兼容 ECharts2，当有 text 时，label 不显示。
     */
    private List<String> text;
    /**
     * 每项的色块与文本标签之间的距离，单位为 px。
     */
    private Integer textGap = 10;
    /**
     * 是否显示每项的文本标签。默认情况是，如果 text 被使用则不显示文本标签，否则显示。
     */
    private Boolean showLabel;
    /**
     * 每两个图元之间的间隔距离，单位为 px。
     */
    private Integer itemGap = 10;
    /**
     * 默认的图形。可选值为：'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'。
     */
    private String itemSymbol = "roundRect";
    /**
     * 是否显示 visualMap-piecewise 组件。如果设置为 false，不会显示，但是数据映射的功能还存在。
     */
    private Boolean show = true;
    /**
     * 指定用数据的『哪个维度』，映射到视觉元素上。『数据』即 series.data。
     * 可以把 series.data 理解成一个二维数组，其中每个列是一个维度，即 dimension。
     * 默认取 data 中最后一个维度。
     */
    private Integer dimension;
    /**
     * 指定取哪个系列的数据，即哪个系列的 series.data。默认取所有系列。
     */
    private List<Integer> seriesIndex;
    /**
     * 打开 hoverLink 功能时，鼠标悬浮到 visualMap 组件上时，鼠标位置对应的数值在图表中对应的图形元素，会高亮。
     * 反之，鼠标悬浮到图表中的图形元素上时，在 visualMap 组件的相应位置会有三角提示其所对应的数值。
     */
    private Boolean hoverLink = true;
    /**
     * 定义在选中范围中的视觉元素。（用户可以和 visualMap 组件交互，用鼠标或触摸选择范围）
     */
    private VisualMapRange inRange;
    /**
     * 定义在选中范围外的视觉元素。（用户可以和 visualMap 组件交互，用鼠标或触摸选择范围）
     */
    private VisualMapRange outOfRange;
    /**
     * visualMap 组件中，控制器的 inRange 和 outOfRange 设置。如果没有这个 controller 设置，控制器会使用外层的 inRange outOfRange 设置；
     * 如果有这个 controller 设置，则会采用这个设置。适用于一些控制器视觉效果需要特殊定制或调整的场景。
     */
    private VisualMapController controller;
    /**
     * 所有图形的 zlevel 值。zlevel 用于 Canvas 分层，不同 zlevel 值的图形会放置在不同的 Canvas 中，zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面。
     */
    private Integer zlevel;
    /**
     * 组件的所有图形的 z 值。控制图形的前后顺序。z 值小的图形会被 z 值大的图形覆盖。z 相比 zlevel 优先级更低，而且不会创建新的 Canvas。
     */
    private Integer z = 4;
    /**
     * visualMap 组件离容器左侧的距离。left 的值可以是具体像素值、相对于容器高宽的百分比，也可以是 'left', 'center', 'right'。
     * 如果 left 的值为 'left', 'center', 'right'，组件会根据相应的位置自动对齐。
     */
    private Object left;
    /**
     * visualMap 组件离容器上侧的距离。top 的值可以是具体像素值、相对于容器高宽的百分比，也可以是 'top', 'middle', 'bottom'。
     * 如果 top 的值为 'top', 'middle', 'bottom'，组件会根据相应的位置自动对齐。
     */
    private Object top = "auto";
    /**
     * visualMap 组件离容器右侧的距离。right 的值可以是具体像素值、相对于容器高宽的百分比。
     */
    private Object right = "auto";
    /**
     * visualMap 组件离容器下侧的距离。bottom 的值可以是具体像素值、相对于容器高宽的百分比。
     */
    private Object bottom;
    /**
     * 如何放置 visualMap 组件，水平（'horizontal'）或者竖直（'vertical'）。
     */
    private String orient = "vertical";
    /**
     * visualMap-piecewise 内边距，单位 px，默认各方向内边距为 5，接受数组分别设定上右下左边距。
     */
    private Object padding = 5;
    /**
     * 背景色。
     */
    private String backgroundColor = "rgba(0,0,0,0)";
    /**
     * 边框颜色。
     */
    private String borderColor = "#ccc";
    /**
     * 边框线宽，单位 px。
     */
    private Integer borderWidth;
    /**
     * 这个配置项，是为了兼容 ECharts2 而存在，ECharts3 中已经不推荐使用。它的功能已经移到了 inRange 和 outOfRange 中。
     * 如果要使用，则须注意，color 属性中的顺序是由数值大到小，但是 inRange 或 outOfRange 中 color 的顺序，总是由数值小到大。二者不一致。
     */
    private List<String> color = List.of("#bf444c", "#d88273", "#f6efa6");
    /**
     * visualMap 文字的样式配置。
     */
    private VisualMapTextStyle textStyle;
    /**
     * 标签的格式化工具。如果为 string，表示模板；如果为 Function，表示回调函数。
     */
    private Object formatter;
}
